import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-10-17
 * Time:19:41
 */

/**
 * 扫描指定目录，并找到名称中包含指定字符的所有普通文件（不包含目录），并且后续询问用户是否要删除该文件
 */

public class Demo1 {
    public static void main(String[] args) throws IOException {
        //1.让用户输入了必要的信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要扫描的途径: ");
        File rootDir = new File(scanner.next());
        //isDirectory()-->判断 File 对象代表的文件是否是一个目录
        if (!rootDir.isDirectory()){
            System.out.println("您输入的目录不存在!!");
            return;
        }
        System.out.println("请输入您要搜索的关键词: ");
        //要删除的目录
        String toDelete = scanner.next();
        //2.遍历目录,借用一个核心方法:
        /**
         * listFiles()-->能够把当前的文件和子目录列举出来
         * 只能列出一层,没办法直接列出子目录中的子目录
         */
        /**
         * 解决方案:遍历listFiles中的结果,针对每个元素,进行判定,看它是一个普通的文件还是一个目录
         * 如果是普通的文件:直接判定文件名是否包含了要查的词
         * 如果是目录,则递归地调用listFiles   相当于是一个n叉树
         */
        scanDir(rootDir,toDelete);
    }


    //借助这个方法进行递归遍历
    private static void scanDir(File rootDir, String toDelete) throws IOException {
        System.out.println("当前访问:" + rootDir.getCanonicalPath());
        File[] files = rootDir.listFiles();
        if (files == null){
            //空目录
            return;
        }
        //如果非空,循环遍历
        for (File f:files) {
            if (f.isDirectory()){
                scanDir(f,toDelete);
            }else {
                //不是目录,普通文件,判定文件名是否符合要求,是否进行删除
                checkDelete(f,toDelete);
            }
        }
    }

    private static void checkDelete(File f, String toDelete) throws IOException {
        if (f.getName().contains(toDelete)){
            //getCanonicalPath获取绝对路径
            System.out.println("这个单词" + toDelete+"被" + f.getCanonicalPath() + "包含了,是否要删除?(y/n)");
            Scanner scanner = new Scanner(System.in);
            String choose = scanner.next();
            if (choose.equals("y") || choose.equals("Y")){
                f.delete();
            }
        }
    }
}
